把外部框架(如 HuggingFace、OpenAI API)放在最外圈。
在程式世界裡,「框架(Framework)」就像工具箱,
裡面有螺絲起子、扳手、電鑽,可以幫我們更快完成作品。
但這些工具不是永遠都一樣,有時會壞、有時會更新。
所以,我們不要讓整個房子都黏在工具上,
而是讓工具待在「最外圈」,隨時可以換。
小明要蓋一間 LEGO 房子。
他用了一組電動工具幫忙組裝,很方便。
但有一天,那個品牌停產了。
幸好他把「工具」跟「房子」分開,
換成別家的螺絲起子也能繼續用!
這就像程式裡的框架:
框架只是幫忙的工具,不是房子的骨架。
骨架(核心邏輯)要自己蓋,
這樣工具壞了、更新了都不怕。
在 AI 專案裡,我們常用不同的框架:
這些都屬於「外部世界」。
我們會讓他們待在最外圈,透過 Adapter 跟核心互動。
範例(JavaScript 模擬):
// 核心邏輯:定義 AI 要做什麼
class AIUseCase {
constructor(provider) {
this.provider = provider; // 依賴外部驅動
}
async ask(question) {
const answer = await this.provider.getAnswer(question);
return `AI 說:${answer}`;
}
}
// 外圍框架:像 OpenAI 的 API
class OpenAIProvider {
async getAnswer(q) {
// 模擬呼叫外部 API
return `(OpenAI 回答)${q} 是個好問題!`;
}
}
// 換另一個框架:HuggingFace
class HuggingFaceProvider {
async getAnswer(q) {
return `(HuggingFace 回答)${q} 聽起來不錯喔!`;
}
}
// 主程式:可以自由換框架
const openAI = new AIUseCase(new OpenAIProvider());
const hfAI = new AIUseCase(new HuggingFaceProvider());
openAI.ask("你喜歡貓嗎?").then(console.log);
hfAI.ask("你喜歡貓嗎?").then(console.log);
這樣設計的好處:
Frameworks & Drivers 是程式世界的「工具箱」,
幫我們跟外部世界連線。
但真正的房子(核心邏輯)要自己設計,
這樣工具壞了也不會垮。
如果你有一個「AI 工具箱」,
裡面只能放三個外部工具,你會選哪三個?為什麼?